////////////////////////////////////////////////////////////////////////////////

#ifndef _SERVER_ENGINE_H_
#define _SERVER_ENGINE_H_

////////////////////////////////////////////////////////////////////////////////

#include <vector>

////////////////////////////////////////////////////////////////////////////////

#include "timer.h"
#include "battlefield.h"

////////////////////////////////////////////////////////////////////////////////


/** Game server engine
*
*  @author   Roman Pasechnik
*  @since    Jun 04th, 2009
*  @updated  Jun 05th, 2009
*/
class ServerEngine
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    ServerEngine();


    /** Destructor */
    virtual ~ServerEngine();


////////////////////////////////////////////////////////////////////////////////


    /** Key's flags */
    enum KeyFlags
    {
        W_KEY = 0x1,
        A_KEY = 0x2,
        D_KEY = 0x4,
        S_KEY = 0x8
    };


////////////////////////////////////////////////////////////////////////////////


    /** Process engine logic */
    void ProcessEvents( unsigned int _keyFlags,
                        STM::Position _mousePosition );


    /** Process engine logic */
    void ProcessLogic();


    /** Gets information to draw on clients screen */
    void FetchDrawData( STM::ScrPositions& _players,
                        STM::ScrPositions& _bullets );


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** Process collisions logic */
    void ProcessCollisions();


    /** Process movement logic */
    void ProcessMovement();


    /** Set object's velocity */
    void SetVelocity();


    /** Battle arena */
    Battlefield m_Battlefield;


    /** Key flags
     *
     *  
     */
    unsigned int m_KeyFlags;


////////////////////////////////////////////////////////////////////////////////
};


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

